package com.qingzhi.spring.demo.controller;

import com.qingzhi.spring.demo.model.UserInfo;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@RequestMapping("/resp")
// @RestController // 全部返回数据 @RestController = @Controller + @ResponseBody
@Controller // 类全部返回页面
public class RespController {

    // 返回页面
    @RequestMapping("/r1")
    public String returnPage() {
        return "/page.html"; // 这里必须要添加 /，这里的路径是一个相对路径，是在static这个包下相对的
    }

    // 返回数据
    // 在返回页面的这个类中如果需要返回数据的话，就在其要返回数据的方法上面添加 @ResponseBody 标签
    @ResponseBody
    @RequestMapping("/r2")
    public String returnData() {
        return "我是前端需要的数据";
    }

    // 返回 html 数据
    @ResponseBody
    @RequestMapping("/r3")
    public String returnHtml() {
        // 浏览器默认的情况下呢，对于返回的想应的类型呢是 test/html 的，所以可以处理 html的代码片段
        return "<h1>我是一级标题</h1>";
    }

    @ResponseBody
    @RequestMapping(value = "/r4",produces = "text/plain")
    // 上面都说了是默认情况下，所以对于返回类型呢是可以进行修改的，上面的呢就是进行修改了，修改成了plain类型
    public String returnText() {
        return "<h1>我是一级标题</h1>";
    }

    // 返回 json
    @ResponseBody
    @RequestMapping("/r5")
    public UserInfo returnJson() {
        // Spring 会根据方法的返回结果呢，对其 Content-Type 进行设置，这个事返回 UserInfo这个对象，就会变成 application/json
        UserInfo userInfo = new UserInfo("zhangsan",15);
        return userInfo;
    }

    // 设置状态码
    @ResponseBody
    @RequestMapping(value = "/r6",produces = "text/plain")
    // 上面都说了是默认情况下，所以对于返回类型呢是可以进行修改的，上面的呢就是进行修改了，修改成了plain类型
    public String setStatus(HttpServletResponse response) {
        response.setStatus(404);
        return "设置状态码成功";
    }

    // 设置 Header
    @ResponseBody
    @RequestMapping(value = "/r7",produces = "text/plain")
    // 上面都说了是默认情况下，所以对于返回类型呢是可以进行修改的，上面的呢就是进行修改了，修改成了plain类型
    public String setHeader(HttpServletResponse response) {
        response.setHeader("myHeader","myHeader"); // 这个就是根据 K-V 形式的
        return "设置Header成功";
    }
}
